home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Utilities / ViewIt Shareware / ViewIt™ 2.04 Shareware / Projects / C Demos / FaceProcLC.c next >
Text File  |  1992-06-24  |  3KB  |  90 lines

  1. /* FaceWare 2.0 Initialization & Dispatching Procedures */
  2. /* ©FaceWare 1989-92.  All Rights Reserved. */
  3.  
  4. #include "FaceStorLC.h"
  5. struct FaceRec fRec;
  6.  
  7. typedef struct HeadRec {
  8.         ProcPtr        addr;
  9.         short            baseID;
  10.         short            versID;
  11.         short            message;
  12.         short            resID;
  13.         Ptr                fPtr;
  14.     } HeadRec,    *HeadPtr;
  15.  
  16. void PrepIt (long x, long b, long v, long r, long f)
  17.     {
  18.     short i;
  19.     ((HeadPtr)x)->addr    = (ProcPtr)*GetResource('FCMD',1000);
  20.     ((HeadPtr)x)->baseID  = b;
  21.     ((HeadPtr)x)->versID  = v;
  22.     ((HeadPtr)x)->message = 0;
  23.     ((HeadPtr)x)->resID     = r;
  24.     ((HeadPtr)x)->fPtr    = (Ptr)f;
  25.     if (fRec.xEntries > 0) 
  26.      for (i = 0; i <= fRec.xEntries - 1; i++)
  27.         if (((HeadPtr)x)->baseID == fRec.xTable[i * 4])
  28.          if (((HeadPtr)x)->versID == fRec.xTable[1 + i * 4])
  29.           if (fRec.xTable[3 + i * 4] != 0)
  30.              ((HeadPtr)x)->addr = (ProcPtr)fRec.xTable[3 + i * 4];
  31.     }
  32.  
  33. pascal void fJumpIt(Ptr thePtr) = {0x2257,0x2051,0x4E90};
  34.  
  35. void FaceIt (void* thePtr, long m1, long m2, long m3, long m4, long m5)
  36.     {
  37.     short i;
  38.     if (m1 == DoInit) {
  39.         if (m4 > -1 && !BitTst(&m4, 31L)) {
  40.             FlushEvents(62, 0);        /* ignore spurious mouse and key events */
  41.             InitGraf(&thePort);        /* perform appropriate Mac initializations */
  42.             InitFonts();
  43.             InitWindows();
  44.             InitMenus();
  45.             TEInit();
  46.             InitDialogs(0L);
  47.             }
  48.         CtoPstr(fRec.uName);
  49.         if (GetResource('FCMD', 1000) == 0)    /* LoadIt available? */
  50.          if (OpenResFile((StringPtr)StripAddress((Ptr)fRec.uName)) < 0)
  51.              ExitToShell();                                        /* quit if not found */
  52.         fRec.fFlags = m2;                /* store FaceIt bit flags    */
  53.         fRec.xEntries = m5;            /* store # of table entries */
  54.         thePtr = (Ptr)&fRec;    
  55.         if (m3 > -1) {                    /* call LoadIt to expand heap? */
  56.             PrepIt((long)thePtr,m3,0L,0L,(long)thePtr);
  57.             fJumpIt(thePtr);}
  58.         PrepIt((long)thePtr,1100L,20L,0L,(long)thePtr);           /* setup fRec header    */
  59.         PrepIt((long)&fRec.dHead,1130L,10L,0L,(long)thePtr); /* setup dRec header    */
  60.         PrepIt((long)&fRec.uHead,1110L,20L,0L,(long)thePtr); /* setup uRec header    */
  61.         PrepIt((long)&fRec.vHead,1200L,20L,0L,(long)thePtr); /* setup vRec header    */
  62.         fRec.fHead[5] = m4;            /* store environment type    */
  63.         fRec.uHead[5] = 1;            /* store string type */
  64.         thePtr = 0L;
  65.         if (m4 < -3) return;
  66.         }
  67.     if (m1 == DoPrep)
  68.         PrepIt(m2, m3, m4, m5, (long)&fRec);
  69.     else if (m1 < 0 && m1 > -11) {
  70.         i = (4 * (-1 - m1));
  71.         fRec.xTable[i] = m2;
  72.         fRec.xTable[1 + i] = m3;
  73.         fRec.xTable[2 + i] = m4;
  74.         fRec.xTable[3 + i] = m5;}
  75.     else {
  76.         if (thePtr == 0L)                                                                    /* default module? */
  77.             thePtr = (Ptr)&fRec.uHead; 
  78.         else if (((HeadPtr)thePtr)->fPtr != (Ptr)&fRec) { /* control driver? */
  79.             fRec.cControl = (ControlHandle)thePtr;
  80.             thePtr = (Ptr)&fRec.vHead;}
  81.         ((HeadPtr)thePtr)->message = 0;
  82.         fRec.uCommand = m1;            /* pass Command & Params */
  83.         fRec.uParam[0] = m2;
  84.         fRec.uParam[1] = m3;
  85.         fRec.uParam[2] = m4;
  86.         fRec.uParam[3] = m5;
  87.         fJumpIt(thePtr);                /* jump to FCMD module */
  88.         }
  89.     }
  90.